#!/bin/bash

# Milvus 本地开发运行脚本
# 该脚本会在本地运行 Milvus，使用嵌入式 etcd，无需外部依赖

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 设置环境变量
echo "设置 Milvus 运行环境..."
source "$SCRIPT_DIR/scripts/setenv.sh"

# 检查 Milvus 可执行文件是否存在
MILVUS_BIN="$SCRIPT_DIR/bin/milvus"
if [ ! -f "$MILVUS_BIN" ]; then
    echo "错误: Milvus 可执行文件不存在: $MILVUS_BIN"
    echo "请先运行 'make build-go' 构建 Milvus"
    exit 1
fi

# 检查 Milvus 库文件目录是否存在
MILVUS_LIB_DIR="$SCRIPT_DIR/cmake_build/lib"
if [ ! -d "$MILVUS_LIB_DIR" ]; then
    echo "警告: Milvus 库文件目录不存在: $MILVUS_LIB_DIR"
    echo "可能会出现共享库加载问题"
fi

# 创建本地数据目录
mkdir -p "$SCRIPT_DIR/local-data"

# 设置嵌入式 etcd 配置
export ETCD_USE_EMBED=true
export ETCD_DATA_DIR="$SCRIPT_DIR/local-data/etcd"
export ETCD_CONFIG_PATH="$SCRIPT_DIR/embedEtcd.yaml"
export DEPLOY_MODE=STANDALONE

# 设置配置文件路径
CONFIG_FILE="$SCRIPT_DIR/configs/milvus.yaml"
CIPHER_CONFIG_FILE="$SCRIPT_DIR/configs/cipher.yaml"

# 日志文件路径 - 使用东八区时间戳命名
LOG_DIR="$SCRIPT_DIR/logs"
TIMESTAMP=$(TZ=Asia/Shanghai date +"%Y%m%d_%H%M%S")
LOG_FILE="$LOG_DIR/milvus_$TIMESTAMP.log"
mkdir -p "$LOG_DIR"

# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
    echo "错误: Milvus 配置文件不存在: $CONFIG_FILE"
    exit 1
fi

# 检查嵌入式etcd配置文件是否存在
if [ ! -f "$ETCD_CONFIG_PATH" ]; then
    echo "错误: 嵌入式 etcd 配置文件不存在: $ETCD_CONFIG_PATH"
    echo "请创建 embedEtcd.yaml 配置文件"
    exit 1
fi

# 检查cipher配置文件是否存在
if [ ! -f "$CIPHER_CONFIG_FILE" ]; then
    echo "错误: Cipher 配置文件不存在: $CIPHER_CONFIG_FILE"
    exit 1
fi

echo "启动 Milvus (本地开发模式)..."
echo "可执行文件路径: $MILVUS_BIN"
echo "库文件路径: $MILVUS_LIB_DIR"
echo "配置文件路径: $CONFIG_FILE"
echo "Cipher配置文件路径: $CIPHER_CONFIG_FILE"
echo "ETCD 数据目录: $ETCD_DATA_DIR"
echo "ETCD 配置文件: $ETCD_CONFIG_PATH"
echo "日志文件路径: $LOG_FILE"

# 如果没有传入参数，则默认使用 run standalone 模式
if [ $# -eq 0 ]; then
    echo "未提供参数，使用默认参数: run standalone"
    echo "启动时间: $(date)" >> "$LOG_FILE"
    exec "$MILVUS_BIN" run standalone 2>&1 | tee -a "$LOG_FILE"
else
    # 运行 Milvus，传递所有参数
    echo "启动时间: $(date)" >> "$LOG_FILE"
    exec "$MILVUS_BIN" "$@" 2>&1 | tee -a "$LOG_FILE"
fi